
package filters;

import jakarta.servlet.http.HttpServletResponse;

public class HttpServletResponseHeaderConfig {

    /**
     * 设置 HttpServletResponseHeader
     */
    public static void setHttpServletResponseHeader(HttpServletResponse response) {
        // 设置允许携带 Cookie
        response.addHeader(
                HttpServletResponseHeaderEnums.Access_Control_Allow_Credentials.getName(),
                HttpServletResponseHeaderEnums.Access_Control_Allow_Credentials.getValue());
        // 设置允许的跨域请求来源
        response.addHeader(
                HttpServletResponseHeaderEnums.Access_Control_Allow_Origin.getName(),
                HttpServletResponseHeaderEnums.Access_Control_Allow_Origin.getValue());
        // 设置访问源请求头
        response.addHeader(
                HttpServletResponseHeaderEnums.Access_Control_Allow_Headers.getName(),
                HttpServletResponseHeaderEnums.Access_Control_Allow_Headers.getValue());
        // 设置允许的请求方法
        response.addHeader(
                HttpServletResponseHeaderEnums.Access_Control_Allow_Methods.getName(),
                HttpServletResponseHeaderEnums.Access_Control_Allow_Methods.getValue());
        // 有效期单位秒（设置了之后，跨域请求在这个时间段不需要再次发送预检请求）
        /**
         * Access-Control-Max-Age 是一个 HTTP 响应头字段，
         * 用于指定浏览器在执行跨域资源共享（CORS）预检请求时，
         * 可以缓存预检请求的结果的最大时间（以秒为单位）。
         *
         * 预检请求（preflight request）是由浏览器在实际发送跨域请求之前发送的一个 OPTIONS 请求，
         * 用来检测服务器是否允许该跨域请求。通过缓存预检请求的结果，
         * 浏览器可以减少发送预检请求的次数，从而提高性能。
         */
        response.addHeader(
                HttpServletResponseHeaderEnums.Access_Control_Max_Age.getName(),
                HttpServletResponseHeaderEnums.Access_Control_Max_Age.getValue());
    }
}
